import 'package:flutter/foundation.dart';
import '../models/page_state.dart';
import '../utils/error_handler.dart';

/// MVVM 架构的基础 ViewModel 类
/// 提供标准化的页面状态管理和业务逻辑处理
abstract class BaseViewModel extends ChangeNotifier {
  PageState _state = PageState.idle;
  String? _errorMessage;

  /// 当前页面状态
  PageState get state => _state;
  
  /// 错误信息
  String? get errorMessage => _errorMessage;

  /// 设置页面状态
  void setState(PageState newState, {String? error}) {
    _state = newState;
    _errorMessage = error;
    notifyListeners();
  }

  /// 设置加载状态
  void setLoading() => setState(PageState.loading);

  /// 设置成功状态
  void setSuccess() => setState(PageState.success);

  /// 设置空数据状态
  void setEmpty() => setState(PageState.empty);

  /// 设置错误状态
  void setError(String message) => setState(PageState.error, error: message);

  /// 设置没有更多数据状态
  void setNoMore() => setState(PageState.noMore);

  /// 通用的异步操作处理
  Future<void> handleAsyncOperation(Future<void> Function() operation) async {
    try {
      setLoading();
      await operation();
      setSuccess();
    } catch (error, stackTrace) {
      setError(error.toString());
      ErrorHandler.handleError(error, stackTrace);
    }
  }

  /// ViewModel 初始化方法
  void init() {
    // 子类可以重写此方法进行初始化
  }

  @override
  void dispose() {
    // 清理资源
    super.dispose();
  }
}